home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / language / embedded / m68k / tutor.arc / TRAP14.SA < prev    next >
Text File  |  1990-01-05  |  7KB  |  204 lines

  1. TRAP14   IDNT      0,2       Trap 14 handler of "TUTOR"              06/25/82
  2.  
  3.          XREF.S    AV46
  4.          XREF      CHRPRINT
  5.          XREF      FIXBUF
  6.          XREF      FIXDADD
  7.          XREF      FIXDATA
  8.          XREF      FIXDCRLF
  9.          XREF      GETHEX
  10.          XREF      GETNUMA
  11.          XREF      GETNUMD
  12.          XREF      GETSER1
  13.          XREF      HEX2DEC
  14.          XREF      INCHNE
  15.          XREF      MACSBUG
  16.          XREF      OUT1CR
  17.          XREF      OUTCH
  18.          XREF      OUTPUT
  19.          XREF      OUTPUT21
  20.          XREF      PNT2HX
  21.          XREF      PNT4HX
  22.          XREF      PNT6HX
  23.          XREF      PNT8HX
  24.          XREF      PORTIN1
  25.          XREF      PORTIN1N
  26.          XREF      PORTIN20
  27.          XREF      PRCRLF
  28.          XREF      PUTHEX
  29.          XREF.S    REGA7
  30.          XREF      SAVE
  31.          XREF      START
  32.          XREF      TAPEIN
  33.          XREF      TAPEOUT
  34.          XREF      TDISPLY
  35.          XREF.S    TEMP
  36.  
  37. EOT      EQU       4
  38. LF       EQU       $A
  39. CR       EQU       $D
  40.  SPC 1
  41. *        CALLING SEQUENCE
  42. *                  D7 = XXXXXXFF   WHERE "FF" IF FUNCTION NUMBER
  43. *                  TRAP      #14
  44. SAVEREGS MACRO
  45.          MOVE.L    A7,REGA7            SAVE STACK POINTER
  46.          LEA       SV\@(PC),A7    A7   = RETURN ADDRESS (FOR CALL TO SAVE)
  47.          MOVE.L    A7,TEMP             TEMP = RETURN ADDRESS
  48.          BRA       SAVE                BSR WITHOUT USING STACK
  49. SV\@     DS        0
  50.  SPC 1
  51.          ENDM
  52.  
  53. ADDR2MEM MACRO
  54.          PEA.L     \1(PC)              MOVE ADDRESS TO MEMORY
  55.          MOVE.L    (A7)+,\2
  56.          ENDM
  57.  
  58.          SECTION.S 1
  59. CTLINK   DS.L      1                   POINTER TO FIRST TABLE
  60.  
  61.          SECTION   10
  62.          ADDR2MEM  TRAP14,AV46
  63.          MOVE.L    #(254<<24)+CT,CTLINK
  64.  
  65.          SECTION   11
  66. TRAP14
  67.          MOVEM.L   D1/D7/A1-A2,-(A7)
  68.  
  69.          MOVE.L    CTLINK,A1
  70. T100     MOVE.B    (A1),D1             D1 = FUNCTION FROM TABLE
  71.          CMP.B     #255,D1
  72.          BEQ.S     T500                END OF TABLE
  73.  
  74.          CMP.B     #254,D1
  75.          BEQ.S     T600                LINK IN LIST
  76.  
  77.          CMP.B     D7,D1
  78.          BEQ.S     T400                FOUND MATCH
  79.  
  80.          ADD.L     #4,A1
  81.          BRA       T100
  82.  
  83. T400     MOVE.L    (A1),D1             FFAAAAAA
  84.          ASL.L     #8,D1               AAAAAA..
  85.          LSR.L     #8,D1               00AAAAAA  GO TO ADDRESS
  86.  
  87.          BTST.B    #5,16(A7)
  88.          BEQ.S     T450                CALL FROM USER MODE
  89.  
  90. *  CALL FROM SUPERVISOR MODE
  91. * STACK (WORDS)
  92. *   +0   D1 HIGH
  93. *   +2   D1 LOW
  94. *   +4   D7 HIGH
  95. *   +6   D7 LOW
  96. *   +8   A1 HIGH
  97. *   +10  A1 LOW
  98. *   +12  A2 HIGH              STATUS REG
  99. *   +14  A2 LOW               GOTO HIGH
  100. *   +16  STATUS REG           GOTO LOW
  101. *   +18  RETURN HIGH        RETURN HIGH
  102. *   +20  RETURN LOW         RETURN LOW
  103. *
  104.          MOVE.L    16(A7),12(A7)       SR
  105.          MOVE.L    D1,14(A7)           GOTO ADDRESS
  106.          MOVEM.L   (A7)+,D1/D7/A1      RESTORE REGISTERS
  107.          RTE                           GOTO (AND TRIM STACK)
  108.  PAGE
  109. * STACK (WORDS)
  110. *   +0   D1 HIGH
  111. *   +2   D1 LOW
  112. *   +4   D7 HIGH
  113. *   +6   D7 LOW
  114. *   +8   A1 HIGH
  115. *   +10  A1 LOW
  116. *   +12  A2 HIGH                                 (USER STACK)
  117. *   +14  A2 LOW
  118. *   +16  STATUS REG         STATUS REG
  119. *   +18  RETURN HIGH        GOTO HIGH            RETURN HIGH
  120. *   +20  RETURN LOW         GOTO LOW             RETURN LOW
  121. *
  122. * CALL FROM USER MODE
  123. T450     MOVE.L    18(A7),D7           RETURN PC
  124.          MOVE.L    D1,18(A7)           GOTO ADDRESS
  125.          MOVE.L    USP,A1              POINTER TO USER STACK
  126.          MOVE.L    D7,-(A1)            RETURN PC TO USER STACK
  127.          MOVE.L    A1,USP              UPDATED USER STACK POINTER
  128.          MOVEM.L   (A7)+,D1/D7/A1/A2
  129.          RTE
  130.  
  131. T500     MOVEM.L   (A7)+,D1/D7/A1/A2
  132.          SAVEREGS
  133.          LEA       MSGT14(PC),A5
  134.          BSR       FIXDATA
  135.          BSR       OUT1CR
  136.          BSR       TDISPLY
  137.          BRA       MACSBUG
  138. MSGT14   DC.B      'UNDEFINED TRAP 14',EOT
  139.  
  140.  
  141. T600     MOVE.L    (A1),A1
  142.          BRA       T100
  143.  
  144. T700     DS        0                   253 APPEND NEW TABLE
  145.          MOVE.L    A0,D1               ..AAAAAA
  146.          MOVE.L    CTLINK,A0           A0 = LINK TO BE RETURNED
  147.          ROL.L     #8,D1               AAAAAA..
  148.          MOVE.B    #254,D1             AAAAAAFE
  149.          ROR.L     #8,D1               FEAAAAAA
  150.          MOVE.L    D1,CTLINK
  151.          RTS
  152.  PAGE
  153. *  CREATE ENTRY TO FUNCFIION/ADDRESS TABLE
  154. *    FFAAAAAA
  155. *    FF......      FUNCTION NUMBER
  156. *    ..AAAAAA      ADDRESS OF FUNCTION
  157. FADDR    MACRO     \1,\2
  158.          DC.L      (\1<<24)+\2
  159.          ENDM
  160.  
  161. CT       FADDR     253,T700            APPEND NEW TABLE
  162.          FADDR     252,FIXDADD         APPEND DATA (A5) TO BUFFER (A6)+
  163.          FADDR     251,FIXBUF          SET A5 & A6 AS POINTERS TO BUFFER
  164.          FADDR     250,FIXDATA         MOVE DATA (A5) TO BUFFER; A5=BUFFER A6
  165.          FADDR     249,FIXDCRLF
  166.          FADDR     248,F100            OUTPUT CHAR PORT1  D0=CHAR
  167.          FADDR     247,F110            INPUT CHAR PORT1  D0=CHAR
  168.          FADDR     244,CHRPRINT        OUTPUT CHAR PORT3 D0=CHAR
  169.          FADDR     243,OUTPUT          OUTPUT STRING PORT1 (A5) (A6)
  170.          FADDR     242,OUTPUT21        OUTPUT STRING PORT2 (A5) (A6)
  171.          FADDR     241,PORTIN1         INPUT STRING PORT1  (A5) (A6)
  172.          FADDR     240,PORTIN20        INPUT STRING PORT2  (A5) (A6)
  173.          FADDR     239,TAPEOUT         OUTPUT STRING TO PORT4 (A5) (A6)
  174.          FADDR     238,TAPEIN          INPUT STRING FROM PORT4 (A5) (A6)
  175.          FADDR     237,PRCRLF          OUTPUT STRING TO PORT3 (A5) (A6)
  176.          FADDR     236,HEX2DEC         CONVERT HEX D0 TO DECIMAL (A6)+
  177.          FADDR     235,GETHEX          GET HEX CHAR INTO D0 FROM (A5)+
  178.          FADDR     234,PUTHEX          FORMAT HEX CHAR FROM D0 TO (A6)+
  179.          FADDR     233,PNT2HX          FORMAT 2 HEX CHAR FROM D0 TO (A6)+
  180.          FADDR     232,PNT4HX          FORMAT 4 HEX CHAR FROM D0 TO (A6)+
  181.          FADDR     231,PNT6HX          FORMAT 6 HEX CHAR FROM D0 TO (A6)+
  182.          FADDR     230,PNT8HX          FORMAT 8 HEX CHAR FROM D0 TO (A6)+
  183.          FADDR     229,START           RESTART TUTOR INITIALIZE EVERYTHING
  184.          FADDR     228,MACSBUG         GOTO TUTOR;   PRINT PROMPT
  185.          FADDR     227,F120            OUTPUT STRING,CR,LF PORT1 (A5) (A6)
  186.          FADDR     226,GETNUMA         GET HEX NUMBER (A5)+ INTO D0
  187.          FADDR     225,GETNUMD         GET DECIMAL NUMBER (A5)+ INTO D0
  188.          FADDR     224,PORTIN1N        INPUT STRING PORT1 (NO AUTO LF)
  189.  
  190.          FADDR     255,$FFFFFF         END KEY
  191.  
  192. F100     BSR       GETSER1             A0 = PORT1 ADDRESS
  193.          BRA       OUTCH
  194.  
  195. F110     BSR       GETSER1             A0 = PORT1 ADDRESS
  196.          BRA       INCHNE
  197.  
  198. F120     BSR       OUTPUT              OUTPUT STRING,CR,LF PORT1 (A5) (A6)
  199.          MOVE.L    #CR,D0
  200.          BSR       F100                OUTPUT CHAR
  201.          MOVE.L    #LF,D0
  202.          BSR       F100                OUTPUT CHAR
  203.          RTS
  204.          END